C#.NStar Pre-Pre-I-3



Привет, неизвестный путник! Здесь вы можете просмотреть информацию о C#.NStar Pre-Pre-I-3. Вы можете скачать EXE или просмотреть список изменений, скриншоты и/или видео.
Что уже проверено и работает в дополнение к версии Pre-Pre-I-2o2:
1. Именованные константы.
2. Тип typename, значениями которого являются типы. Возможны ошибки, прошу протестировать.
3. new() - конструктор с автоматическим определением конструируемого типа.
4. Перегрузка функций, иногда позволяющая даже то, что в C#.NET не позволяется.
5. Как и обещал, выражения switch. Их синтаксис такой же, как в C#.NET, за двумя исключениями: 1 - если выражение многострочное (если от источника до закрывающей фигурной скобки есть хоть один перевод строки, это уже многострочное выражение), запятая перед закрывающей фигурной скобкой обязательна; 2 - вместо when используется if. Также, транспайлер может упасть, если не указать опцию по умолчанию (_).
6. Оператор typeof(), возвращающий тип выражения в скобках. Возвращенный тип можно присвоить переменной рекурсивного типа, а затем использовать эту переменную как тип другой переменной. При этом действии технически вызывается рефлексия, поэтому оно медленное, а в таких переменных преобразуются только элементарные типы и строка (при попытке в таком контексте преобразовать число в список произойдет падение).
7. Прототип GUI, с помощью которого уже можно написать простое приложение, например, игру "три в ряд". Пример кода здесь.


Рабочие примеры кода на C#.NStar (включая выдающие корректные ошибки):
static Class MyClass
{
    closed const string A1000000 = A100000 + A100000 + A100000 + A100000 + A100000 + A100000 + A100000 + A100000 + A100000 + A100000;
    closed const string A100000 = A10000 + A10000 + A10000 + A10000 + A10000 + A10000 + A10000 + A10000 + A10000 + A10000;
    closed const string A10000 = A1000 + A1000 + A1000 + A1000 + A1000 + A1000 + A1000 + A1000 + A1000 + A1000;
    closed const string A1000 = A100 + A100 + A100 + A100 + A100 + A100 + A100 + A100 + A100 + A100;
    closed const string A100 = A10 + A10 + A10 + A10 + A10 + A10 + A10 + A10 + A10 + A10;
    closed const string A10 = "AAAAAAAAAA";
}
return MyClass.A1000000;


static Class MyClass
{
    closed const string A100 = A10 + A10 + A10 + A10 + A10 + A10 + A10 + A10 + A10 + A10;
    closed string A10 = "AAAAAAAAAA";
}
return MyClass.A100;


const int n = 3;
list(n) int list = 8;
list = 123;
return list;


const int n = 2;
(int, int)[n] Function F()
{
    Class MyClass
    {
        int a = 0;
    }
    MyClass b = new MyClass(5);
    return ((b.a, new MyClass(8).a), (b.a, new MyClass(8).a));
}
return F();


using System;
using System.Collections;
const typename real = ListHashSet[int];
typename T = Func[real];
return T;


typename real = int;
repeat (1)
{
    real = System.Collections.Buffer[real];
}
real x = new(1, 123);
return x;


null Function F()
{
}
int Function F(int x)
{
    return x * x;
}
F();
return F(5);


{
    F(5);
    null Function F(int x)
    {
    }
}
int Function F(int x)
{
    return x * x;
}
return F(5);


return 5 switch
{
    0 => 0,
    1 => 2,
    2 => 4,
    3 => 6,
    _ => 16,
};


return "5" switch
{
    "0" => "0",
    "1" => "2",
    "2" => "4",
    "3" => "6",
    _ => "16"
};


var x = 5.1;
typename T = typeof(x);
T y = 8;
return typeof(y);



Все остальное не проверено и, скорее всего, не работает .

Ссылка на EXE (~40 MB)



Назад ко всем версиям